// 02-higher-order-function.js: 高阶函数 - 函数作为返回值

//闭包：
function makeFun() {
    var msg = 'hello function';
    return function () {
        console.log('makeFun', msg);
    }
}

//调用方式1:
const fn = makeFun();
fn();

//调用方式二：
makeFun()();


//once 函数：只执行一次
function once(fn) {
    var done = false;
    return function () {//函数2
        if (!done) {
            done = true;
            //arguments是函数2中的参数
            return fn.apply(this, arguments);
        }
    }
}

var pay = once((money) => {
    console.log(`已支付 ${money} RMB`);
});

pay(5);
pay(5);
pay(5);